
#include "./micropython/py/dynruntime.h"

mp_obj_t _StringAPI_CreateString;
mp_obj_t _StringAPI_GetChar;
mp_obj_t _StringAPI_SetChar;
mp_obj_t _StringAPI_GetLength;
mp_obj_t _StringAPI_Concat;
mp_obj_t _StringAPI_Slice;
mp_obj_t _StringAPI_Contains;
mp_obj_t _StringAPI_StartsWith;

static mp_obj_t init_StringAPI_CreateString(mp_obj_t func) {
    _StringAPI_CreateString = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_GetChar(mp_obj_t func) {
    _StringAPI_GetChar = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_SetChar(mp_obj_t func) {
    _StringAPI_SetChar = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_GetLength(mp_obj_t func) {
    _StringAPI_GetLength = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_Concat(mp_obj_t func) {
    _StringAPI_Concat = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_Slice(mp_obj_t func) {
    _StringAPI_Slice = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_Contains(mp_obj_t func) {
    _StringAPI_Contains = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

static mp_obj_t init_StringAPI_StartsWith(mp_obj_t func) {
    _StringAPI_StartsWith = func;
    return mp_obj_new_bool(mp_obj_new_int(1));
}

mp_obj_t StringAPI_CreateString(size_t n_args, const mp_obj_t *args) {
    return mp_call_function_n_kw(_StringAPI_CreateString, n_args, 0, args);
}

mp_obj_t StringAPI_GetChar(mp_obj_t string, mp_obj_t index) {
    mp_obj_t args[2] = {string, index};
    return mp_call_function_n_kw(_StringAPI_GetChar, 2, 0, args);
}

mp_obj_t StringAPI_SetChar(mp_obj_t string, mp_obj_t index, mp_obj_t chr) {
    mp_obj_t args[3] = {string, index, chr};
    return mp_call_function_n_kw(_StringAPI_SetChar, 3, 0, args);
}

mp_obj_t StringAPI_GetLength(mp_obj_t string) {
    mp_obj_t args[1] = {string};
    return mp_call_function_n_kw(_StringAPI_GetLength, 1, 0, args);
}

mp_obj_t StringAPI_Concat(mp_obj_t string1, mp_obj_t string2) {
    mp_obj_t args[2] = {string1, string2};
    return mp_call_function_n_kw(_StringAPI_Concat, 2, 0, args);
}

mp_obj_t StringAPI_Slice(mp_obj_t string, mp_obj_t start, mp_obj_t stop, mp_obj_t step) {
    mp_obj_t args[4] = {string, start, stop, step};
    return mp_call_function_n_kw(_StringAPI_Slice, 4, 0, args);
}

mp_obj_t StringAPI_Contains(mp_obj_t string, mp_obj_t substring) {
    mp_obj_t args[2] = {string, substring};
    return mp_call_function_n_kw(_StringAPI_Contains, 2, 0, args);
}

mp_obj_t StringAPI_StartsWith(mp_obj_t string, mp_obj_t prefix) {
    mp_obj_t args[2] = {string, prefix};
    return mp_call_function_n_kw(_StringAPI_StartsWith, 2, 0, args);
}

#define CSDK_INIT_STRINGAPI_GLOBALS static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_CS, init_StringAPI_CreateString); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_GC, init_StringAPI_GetChar); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_SC, init_StringAPI_SetChar); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_GL, init_StringAPI_GetLength); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_Cn, init_StringAPI_Concat); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_Sl, init_StringAPI_Slice); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_Ct, init_StringAPI_Contains); static MP_DEFINE_CONST_FUN_OBJ_1(O_SA_Sw, init_StringAPI_StartsWith);
#define CSDK_EXPORT_STRINGAPI_GLOBALS mp_store_global(MP_QSTR_regSA_CS, MP_OBJ_FROM_PTR(&O_SA_CS)); mp_store_global(MP_QSTR_regSA_GC, MP_OBJ_FROM_PTR(&O_SA_GC)); mp_store_global(MP_QSTR_regSA_SC, MP_OBJ_FROM_PTR(&O_SA_SC)); mp_store_global(MP_QSTR_regSA_GL, MP_OBJ_FROM_PTR(&O_SA_GL)); mp_store_global(MP_QSTR_regSA_Cn, MP_OBJ_FROM_PTR(&O_SA_Cn)); mp_store_global(MP_QSTR_regSA_Sl, MP_OBJ_FROM_PTR(&O_SA_Sl)); mp_store_global(MP_QSTR_regSA_Ct, MP_OBJ_FROM_PTR(&O_SA_Ct)); mp_store_global(MP_QSTR_regSA_Sw, MP_OBJ_FROM_PTR(&O_SA_Sw));